package LogicaClasesNew;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.Entity;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlTransient;


    @Entity
    @Table(name="clientes",uniqueConstraints=@UniqueConstraint(columnNames="EMAIL"))
    //Para que email sea unico, funciona dentro de la coleccion de clientes.
    public class Cliente extends Usuario implements Serializable{
    
    //Cliente tiene un listado de Ordenes de Compra
    @XmlTransient
    @OneToMany(mappedBy = "cliente" , targetEntity=OrdenCompra.class)
    private List<OrdenCompra> ordenesdecompra;
    
    //***PARA ENVIO DE MAILS***//
    @XmlElement
    private boolean notificaciones;
    
    @XmlElement
    private boolean notificacionesO;
    //*******FIN ATRIBUTOs****************
    
    //CONTRUCTORES********************************************************
    public Cliente() {
        //Crea un listado vacio
        ordenesdecompra = new ArrayList<OrdenCompra>(); 
        this.notificaciones=true;
        this.notificacionesO=true;
    }
    //Contructor sin subir imagen
    public Cliente(String Nickname, String Nombre, String Apellido, String FechNacim, String password, String Mail) {
        super(Nickname, Nombre, Apellido, FechNacim, password, Mail);
       
    }
    
    //Contructor completo
    public Cliente(String Nickname, String Nombre, String Apellido, String FechNacim, String password, String Mail, byte[] Foto) {
        super(Nickname, Nombre, Apellido, FechNacim, password, Mail, Foto);
    }
    
    // GETTERS Y SETTERS***************************************************
    
    //Obtener el listado de Ordenes
    public List<OrdenCompra> getOrdenCompra() {
        return ordenesdecompra;
    }
    //Agregar una orden de compra
    public void addOrden(OrdenCompra ordencompra) {
        ordenesdecompra.add(ordencompra);
    }
    //Setear notificaciones
    public void setNotificaciones(boolean notificaciones) {
        this.notificaciones = notificaciones;
    }
    //Obtener si notificaciones esta activo o no
    public boolean isNotificaciones() {
        return notificaciones;
    }
    
    
    //Obtener si notificaciones de ORDEN esta activo o no
    public boolean isNotificacionesO() {
        return notificacionesO;
    }

    public void setNotificacionesO(boolean notificacionesO) {
        this.notificacionesO = notificacionesO;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Cliente other = (Cliente) obj;
        return true;
    }
    
    
    
}
